package com.example.controller;

import com.example.model.Student;
import com.example.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;

@Controller
@RequestMapping("/register")
public class RegisterController {

    // spring的特性之一，依赖注入
    // 这个类不用我们去新建
    // 只要是spring的组件就能注入，比如在service里注入了StudentMapper
    // 因为配置了 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> mapper扫描器
    // 已经将mapper都注册成组件了，这个StudentService也一样
    // 想用的时候只要加这个@Autowired注解就ok了
    @Autowired
    private StudentService studentService;

    @GetMapping
    public String renderRegister(){
        return "register";
    }


    // 接受表单传过来的参数
    // 下面的变量名对应着表单的input的name，这样就能直接接收到了
    // 如果name与变量名不一样的话就需要多写一点
    // @RequestParam("name")
    // 这里不用hibernate的校验器了，虽然用了舒服多了
    // 但是免得你学新的玩意增加学习成本
    // 手动校验一下吧
    @PostMapping
    public String register(@RequestParam String num,
                           @RequestParam String password,
                           @RequestParam String role,
                           @RequestParam String name,
                           // 这个忘了django上怎么表达了的，就是把要渲染的数据都整到model上
                           // 在jsp里将里面的key ${key} 拿出来就行了
                           // 类似于 {{ key }}
                           Model model,
                           // 想要啥往这里写就行了，spring会给我们的
                           HttpSession session){

        // 这里写下数据校验，只要一不ok就返回就完事了
        // 写个例子，剩下你自己写就ok了
        if (num.equals("")){
            model.addAttribute("error","账号不能为空");
            // 直接渲染页面就可以了，不用往下执行了
            return "register";
        }

        // 假如数据校验都通过了
        if (role.equals("student")){
            Student student = new Student();
            student.setStuNo(num);
            student.setPassword(password);
            student.setStuName(name);
            // 正常来说这里插入后会新插入后的数据的自增主键id
            // 但是要在那些mapping.xml里面改点东西，懒得弄了就算了
            studentService.insertStudent(student);
            // 这里就注册成功了
            // 注册成功干脆就给他自动登录了，其实也就是往session里插个student
            session.setAttribute("student", student);
            // 然后就可以重定向到student了
            // 重定向就只要在前面加个 "redirect:" + 要转到的地址
            return "redirect:/student";
        }

        System.out.println(num+password+role);
        return "index";
    }
}
